nethackfandomcom-20200214-history
Source:NetHack 3.1.0/monst.h
Below is the full text to monst.h from the source code of NetHack 3.1.0. To link to a particular line, write [[NetHack 3.1.0/monst.h#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* SCCS Id: @(#)monst.h 3.1 92/10/18 */ 2. /* Copyright © Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3. /* NetHack may be freely redistributed. See license for details. */ 4. 5. #ifndef MONST_H 6. #define MONST_H 7. 8. #ifdef MUSE 9. /* The weapon_check flag is used two ways: 10. * 1) When calling mon_wield_item, is 2 or 3 depending on what is desired. 11. * 2) Between calls to mon_wield_item, is 0 or 1 depending on whether or not 12. * the weapon is known by the monster to be cursed (so it shouldn't bother 13. * trying for another weapon). 14. * I originally planned to also use 0 if the monster already had its best 15. * weapon, to avoid the overhead of a call to mon_wield_item, but it turns out 16. * that there are enough situations which might make a monster change its 17. * weapon that this is impractical. 18. */ 19. #define NO_WEAPON_WANTED 0 20. #define NEED_WEAPON 1 21. #define NEED_RANGED_WEAPON 2 22. #define NEED_HTH_WEAPON 3 23. #define NEED_PICK_AXE 4 24. #endif 25. 26. #ifndef ALIGN_H 27. #include "align.h" 28. #endif 29. 30. struct monst { 31. struct monst *nmon; 32. struct permonst *data; 33. unsigned m_id; 34. short mnum; /* permanent monster index number */ 35. uchar m_lev; /* adjusted difficulty level of monster */ 36. aligntyp malign; /* alignment of this monster, relative to the 37. player (positive = good to kill) */ 38. xchar mx, my; 39. xchar mux, muy; /* where the monster thinks you are */ 40. #define MTSZ 4 41. coord mtrackMTSZ; /* monster track */ 42. int mhp, mhpmax; 43. unsigned mappearance; /* for undetected mimics and the wiz */ 44. uchar m_ap_type; /* what mappearance is describing: */ 45. #define M_AP_NOTHING 0 /* mappearance is unused -- monster appears 46. as itself */ 47. #define M_AP_FURNITURE 1 /* stairs, a door, an altar, etc. */ 48. #define M_AP_OBJECT 2 /* an object */ 49. #define M_AP_MONSTER 3 /* a monster */ 50. 51. schar mtame; /* level of tameness, implies peaceful */ 52. int mspec_used; /* monster's special ability attack timeout */ 53. 54. Bitfield(female,1); /* is female */ 55. Bitfield(minvis,1); /* invisible */ 56. Bitfield(cham,1); /* shape-changer */ 57. Bitfield(mundetected,1); /* not seen in present hiding place */ 58. /* implies one of M1_CONCEAL or M1_HIDE, 59. * but not mimic (that is, snake, spider, 60. * trapper, piercer) 61. */ 62. Bitfield(mcan,1); /* has been cancelled */ 63. Bitfield(mspeed,2); 64. /* free bit! */ 65. 66. Bitfield(mflee,1); /* fleeing */ 67. Bitfield(mfleetim,7); /* timeout for mflee */ 68. 69. Bitfield(mcansee,1); /* cansee 1, temp.blinded 0, blind 0 */ 70. Bitfield(mblinded,7); /* cansee 0, temp.blinded n, blind 0 */ 71. 72. Bitfield(mcanmove,1); /* paralysis, similar to mblinded */ 73. Bitfield(mfrozen,7); 74. 75. Bitfield(msleep,1); /* sleeping */ 76. Bitfield(mstun,1); /* stunned (off balance) */ 77. Bitfield(mconf,1); /* confused */ 78. Bitfield(mpeaceful,1); /* does not attack unprovoked */ 79. Bitfield(mtrapped,1); /* trapped in a pit or bear trap */ 80. Bitfield(mleashed,1); /* monster is on a leash */ 81. Bitfield(isshk,1); /* is shopkeeper */ 82. Bitfield(isminion,1); /* is a minion */ 83. 84. Bitfield(isgd,1); /* is guard */ 85. Bitfield(ispriest,1); /* is a priest */ 86. Bitfield(iswiz,1); /* is the Wizard of Yendor */ 87. Bitfield(wormno,5); /* at most 31 worms on any level */ 88. #define MAX_NUM_WORMS 32 /* should be 2^(wormno bitfield size) */ 89. 90. long mstrategy; /* for monsters with mflag3: current strategy */ 91. long mtrapseen; /* bitmap of traps we've been trapped in */ 92. long mlstmv; /* prevent two moves at once */ 93. long mgold; 94. struct obj *minvent; 95. #ifdef MUSE 96. struct obj *mw; 97. long misc_worn_check; 98. xchar weapon_check; 99. #endif 100. uchar mnamelth; /* length of name (following mxlth) */ 101. short mxlth; /* length of following data */ 102. /* in order to prevent alignment problems mextra should 103. be (or follow) a long int */ 104. int meating; /* monster is eating timeout */ 105. long mextra1; /* monster dependent info */ 106. }; 107. 108. /* 109. * Note that mextra[] may correspond to any of a number of structures, which 110. * are indicated by some of the other fields. 111. * isgd -> struct egd 112. * ispriest -> struct epri 113. * isshk -> struct eshk 114. * isminion -> struct emin 115. * (struct epri for roaming priests and angels, which is 116. * compatible with emin for polymorph purposes) 117. * mtame -> struct edog 118. * (struct epri for guardian angels, which do not eat 119. * or do other doggy things) 120. * Since at most one structure can be indicated in this manner, it is not 121. * possible to tame any creatures using the other structures (the only 122. * exception being the guardian angels which are tame on creation). 123. */ 124. 125. #define newmonst(xl) (struct monst *)alloc((unsigned)(xl) + sizeof(struct monst)) 126. #define dealloc_monst(mon) free((genericptr_t)(mon)) 127. 128. /* these are in mspeed */ 129. #define MSLOW 1 /* slow monster */ 130. #define MFAST 2 /* speeded monster */ 131. 132. #define NAME(mtmp) (((char *)(mtmp)->mextra) + (mtmp)->mxlth) 133. 134. #define MON_WEP(mon) ((mon)->mw) 135. #define MON_NOWEP(mon) ((mon)->mw = (struct obj *)0) 136. 137. #endif /* MONST_H */ monst.h